home *** CD-ROM | disk | FTP | other *** search
/ Games of Daze / Infomagic - Games of Daze (Summer 1995) (Disc 1 of 2).iso / x2ftp / msdos / source / snip9503 / faskbhit.c < prev    next >
C/C++ Source or Header  |  1995-03-14  |  1KB  |  63 lines

  1. /*
  2. **  by David Goodenough & Bob Stout
  3. */
  4.  
  5. #ifdef __TURBOC__
  6.  #define FAR far
  7. #else
  8.  #define FAR _far
  9. #endif
  10.  
  11. /*
  12. **  Use old-style lvalue MK_FP() macro
  13. */
  14.  
  15. #undef MK_FP
  16. #define MK_FP(seg,offset) \
  17.         ((void FAR *)(((unsigned long)(seg)<<16) | (unsigned)(offset)))
  18.  
  19. #define biosseg 0x40
  20.  
  21. int fast_kbhit(void)
  22. {
  23.       return *((unsigned FAR *)MK_FP(biosseg, 0x1a)) -
  24.             *((unsigned FAR *)MK_FP(biosseg, 0x1c));
  25. }
  26.  
  27. void fast_kbflush(void)
  28. {
  29.       *((unsigned FAR *)MK_FP(biosseg, 0x1a)) =
  30.             *((unsigned FAR *)MK_FP(biosseg, 0x1c));
  31. }
  32.  
  33. #ifdef TEST
  34.  
  35. #include <stdio.h>
  36. #include <conio.h>
  37. #include <time.h>
  38.  
  39. main()
  40. {
  41.       clock_t Wait;
  42.  
  43.       puts("Hit some keys while I kill some time...");
  44.       Wait = clock();
  45.       while (2 > ((clock() - Wait) / CLK_TCK))
  46.             ;
  47.  
  48.       puts("OK, stop hitting keys while I flush the keyboard...");
  49.       Wait = clock();
  50.       while (2 > ((clock() - Wait) / CLK_TCK))
  51.             ;
  52.  
  53.       fast_kbflush();
  54.       puts("OK, now hit some key you didn't hit before...");
  55.  
  56.       while (!fast_kbhit())
  57.             ;
  58.       printf("You hit %c\n", getch());
  59.       return 0;
  60. }
  61.  
  62. #endif
  63.